package com.tencreat.service.mall;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tencreat.common.core.HttpResult;
import com.tencreat.common.core.domain.model.LoginUser;
import com.tencreat.common.core.domain.model.ReqIdParam;
import com.tencreat.common.core.domain.model.ReqIdsParam;
import com.tencreat.domain.mall.MallGoods;
import com.tencreat.domain.mall.dto.MallGoodsAuditDTO;
import com.tencreat.domain.mall.dto.MallGoodsAddDTO;
import com.tencreat.domain.mall.dto.MallGoodsSearchDTO;
import com.tencreat.domain.mall.vo.*;
import com.tencreat.domain.mall.dto.*;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;

/**
 * 商城商品基本信息Service接口
 *
 * @author tencreat
 * @date 2021-08-13
 */
public interface IMallGoodsService extends IService<MallGoods> {
    /**
     * 查询商品基本信息
     *
     * @param id 商品基本信息ID
     * @return 商品基本信息
     */
    public MallGoods selectMallGoodsById(ReqIdParam id);

    /**
     * 查询商品基本信息列表
     *
     * @param mallGoods 商品基本信息
     * @return 商品基本信息集合
     */
    public List<MallGoods> selectMallGoodsList(MallGoods mallGoods);

    /**
     * 新增商品基本信息
     *
     * @param mallGoods 商品基本信息
     * @return 结果
     */
    public int insertMallGoods(MallGoods mallGoods);

    /**
     * 修改商品基本信息
     *
     * @param mallGoods 商品基本信息
     * @return 结果
     */
    public int updateMallGoods(MallGoods mallGoods);

    /**
     * 批量删除商品基本信息
     *
     * @param ids 需要删除的商品基本信息ID
     * @return 结果
     */
    public int deleteMallGoodsByIds(ReqIdsParam ids);

    /**
     * 删除商品基本信息信息
     *
     * @param id 商品基本信息ID
     * @return 结果
     */
    public int deleteMallGoodsById(ReqIdParam id);

    /**
     * 新增商品
     * @param mallGoodsAddVO
     * @return
     */
    int insertMallGoodsPo(MallGoodsAddDTO mallGoodsAddVO);

    MallGoodsAllVO getInfoGoodsVo(ReqIdParam id);

    IPage<MallGoodTableVO> pageTableVo(MallGoodsDTO mallGoods);

    int updateMallGoodsPo(MallGoodsAddDTO mallGoodsAddVO);

    IPage<MallGoodsListVO> apiList(MallGoodsSearchDTO mallGoodsSearchPo);

    ResGoodsDetailVO queryInfoByGoodsSn(ReqIdParam id, LoginUser loginUser);

    MallGoodsDetailsVO goodInfoById(ReqIdParam idParam);

    HttpResult<List<MallGoods>> selectNewGoods(MallGoods mallGoods);

    /**
     * 商品审核
     * @param dto 入参
     */
    void audit(MallGoodsAuditDTO dto);

    List<MallGoods> getByOrderSn(String orderSn);

    HashMap<String, BigDecimal> getGoodPrice(GoodsVO good);

    List<Integer> queryCount(String orderType);

    boolean reSortOrderReduce(MallGoods mallGoods);

    boolean reSortOrderPlus(MallGoods mallGoods);

    IPage<MallGoodsListVO> recommendList(MallGoodsSearchDTO mallGoodsSearchPo);

//    MallGoodsDetailsVO mallStoreService(ReqIdParam idParam);

    //IPage<MallGoodsListVO> apiStoreList(MallGoodsSearchDTO );

}
